import uuid
import requests
from fastapi.responses import JSONResponse
from fastapi import APIRouter, File, UploadFile
import os
from wx_service.WechatMP import WechatMP

wx_service_app = APIRouter()

Token = 'ameng'
appId = 'wx88c13b8015d6632d'
secret = '6b049677f9fcdcccf62b13fc3b205d88'
wmp = WechatMP(Token=Token, appId=appId, secret=secret)


# 新增函数：从 URL 下载图片并保存到本地
def download_image_from_url(url, save_dir):
    try:
        # 发送 GET 请求获取图片内容
        response = requests.get(url)
        response.raise_for_status()

        # 确保保存目录存在
        os.makedirs(save_dir, exist_ok=True)

        # 使用 UUID 生成唯一文件名
        unique_filename = f"{uuid.uuid4()}.jpg"
        file_path = os.path.join(save_dir, unique_filename)

        # 将图片内容保存到本地文件
        with open(file_path, "wb") as f:
            f.write(response.content)

        return file_path
    except Exception as e:
        raise Exception(f"下载图片失败: {str(e)}")


@wx_service_app.get("/uploadImageFromUrl")
def uploadImageFromUrl(url: str):
    try:
        # 调用新增的下载函数
        img_dir = os.path.abspath("wx_service/data/img")
        file_path = download_image_from_url(url, img_dir)

        # 调用 wmp.uploadMedia 方法上传文件
        res = wmp.uploadMedia('image', file_path)

        # 上传成功后再删除本地文件
        os.remove(file_path)

        return res
    except Exception as e:
        return JSONResponse(status_code=500, content={"message": f"文件上传失败: {str(e)}"})


@wx_service_app.post("/uploadImage")
def uploadImage(file: UploadFile = File(...)):
    """
    处理上传图片的请求。

    该函数接收一个上传的图片文件，将其内容读取并上传到微信媒体平台，最后返回上传后得到的 media_id。

    参数:
    - file (UploadFile): 上传的图片文件对象，通过 FastAPI 的 File(...) 依赖注入获取。

    返回值:
    - dict: 包含上传后得到的 media_id 的字典，格式为 {"media_id": str}。
    """

    img_dir = os.path.abspath("wx_service/data/img")

    # 确保 img 文件夹存在
    os.makedirs(img_dir, exist_ok=True)

    # 使用UUID生成唯一文件名
    unique_filename = f"{uuid.uuid4()}_{file.filename}"
    file_path = os.path.join(img_dir, unique_filename)

    try:
        # 将上传的文件内容写入本地文件
        with open(file_path, "wb") as f:
            file_content = file.file.read()
            f.write(file_content)

        # 获取文件的绝对路径
        absolute_path = os.path.abspath(file_path)

        # 调用 wmp.uploadMedia 方法上传文件
        res = wmp.uploadMedia('image', absolute_path)

        # 上传成功后再删除本地文件
        os.remove(absolute_path)

        return res

    except Exception as e:
        # 处理异常，返回错误信息
        return JSONResponse(status_code=500, content={"message": f"文件上传失败: {str(e)}"})


@wx_service_app.post("/uploadContent")
def uploadContent(data: dict):
    data = {
        "articles": [{
            "title": data.get("title"),
            "thumb_media_id": data.get("media_id"),
            "author": 'AmengI',
            "digest": data.get("digest"),
            "show_cover_pic": 1,
            "content": data.get("content"),
            "need_open_comment": 1,
            "only_fans_can_comment": 1
        }
        ]
    }
    wmp.uploadNews(data)
